#ifndef _TAIIC_YOLO_H
#define _TAIIC_YOLO_H

#include "rknn_api.h"
#include "taiic_rknn.h"
#include<cmath>
#include<algorithm>
#include "postprocess.h"

// #include "../../common/mfccs/mfcc.cpp"

#define NMS_THRESHOLD 0.45
#define BOX_CONF_THRESHOLD 0.25

#define YOLO_IMG_WIDTH 320
#define YOLO_IMG_HEIGHT 320
#define YOLO_IMG_CHANNEL 3
#define YOLO_IMG_BATCH 1
#define SCALE_W 1
#define SCALE_H 1



#define INPUT_TYPE RKNN_TENSOR_UINT8
#define INPUT_LAYOUT RKNN_TENSOR_NHWC

typedef  struct rkTOOLKIT_YOLO_S
{
    char *modelPath;
    rknn_context context; //模型上下文
    rknn_input_output_num io_num; //模型输入输出信息，结构体
    rknn_tensor_attr input_attrs[1];  //模型属性
    rknn_tensor_attr output_attrs[3]; //模型输出属性

    rknn_tensor_mem *input_mems[1]; //模型输入
    rknn_tensor_mem *output_mems[3]; //模型输出

    rknn_tensor_attr orig_output_attrs[3]; //模型orig输出属性
}YOLO_TOOLKIT_MODEL_CTX_S;


// 量化模型的npu输出结果为int8数据类型，后处理要按照int8数据类型处理
// 如下提供了int8排布的NC1HWC2转换成int8的nchw转换代码
int NC1HWC2_int8_to_NCHW_int8(const int8_t *src, int8_t *dst, int *dims, int channel, int h, int w);


int yolo_rknn_toolkit_config_init(YOLO_TOOLKIT_MODEL_CTX_S *ctx);
int yolo_rknn_toolkit_io_init(YOLO_TOOLKIT_MODEL_CTX_S *ctx);
int yolo_rknn_toolkit_data_refresh(YOLO_TOOLKIT_MODEL_CTX_S *ctx, unsigned char *input_data);
detect_result_group_t yolo_rknn_toolkit_result(YOLO_TOOLKIT_MODEL_CTX_S *ctx);


#endif //_TAIIC_YOLO_H
